#include <stdio.h>

int max(int a,int b) {
    return a>b ? a : b;
}

int main() {
    int n;
    scanf("%d",&n);
    int arr[n],sum=0;
    for(int i=0;i<n;i++) {
        scanf("%d",&arr[i]);
        sum+=arr[i];
    }
    int dp[n][n];
    /* dp数组初始化 */
    /* dp[i][j]表示在范围[i,j]中，两个玩家分数之差的最大值 */
    for(int i=0;i<n;i++) {
        dp[i][i]=arr[i];
    }
    /* 状态转移 */
    for(int i=n-2;i>= 0;i--) {
        for(int j=i+1;j<n; j++) {
            dp[i][j]=max((arr[i]-dp[i+1][j]),(arr[j]-dp[i][j-1]));
        }
    }
    printf("%d\n",(sum+dp[0][n-1])/2);
    return 0;
}